#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Python t-string (模板字符串) 演示
Python 3.14+ 新特性

t-string 使用 't' 前缀创建字符串模板，会返回 string.Template 对象而不是普通的字符串
这使得字符串模板的创建更加简洁和直观
"""

import sys
from string import Template


def demo_t_string_basic():
    """演示 t-string 的基本用法"""
    print("=== t-string 基本用法演示 ===")

    # 使用 t-string 创建模板
    name = "Alice"
    age = 25

    # t-string 创建模板对象
    template = t"你好，{name}！今年{age}岁了。"
    print(f"模板类型: {type(template)}")
    print(f"模板对象: {template}")

    # 访问模板的静态部分
    print(f"静态字符串部分: {template.strings}")

    # 访问模板的变量部分
    print(f"变量值: {template.values}")

    # 访问插值对象
    print(f"插值对象: {template.interpolations}")

    # 将模板转换为列表查看各个部分
    print(f"模板分解: {list(template)}")
    print()


def demo_t_string_vs_template():
    """对比 t-string 和传统 Template 的用法"""
    print("=== t-string vs 传统 Template 对比 ===")

    # 传统方式创建模板
    traditional_template = Template("你好，$name！今年$age岁了。")
    print("传统 Template 方式:")
    print(f"  模板: {traditional_template.template}")
    print(f"  替换结果: {traditional_template.substitute(name='Bob', age=30)}")

    # t-string 方式创建模板
    name = "Bob"
    age = 30
    t_string_template = t"你好，{name}！今年{age}岁了。"
    print("\nt-string 方式:")
    print(f"  模板对象: {t_string_template}")
    print(f"  类型: {type(t_string_template)}")
    print()


def demo_t_string_features():
    """演示 t-string 的高级特性"""
    print("=== t-string 高级特性演示 ===")

    # 演示不同的插值格式
    value = 42
    pi = 3.14159

    # 基本插值
    template1 = t"数值是 {value}"
    print(f"基本插值: {template1}")
    print(f"  静态部分: {template1.strings}")
    print(f"  变量值: {template1.values}")

    # 带转换说明符的插值
    template2 = t"π约等于 {pi!s}"
    print(f"\n带转换说明符: {template2}")
    print(f"  静态部分: {template2.strings}")
    print(f"  插值对象: {template2.interpolations}")

    # 多个变量的复杂模板
    response = "欢迎"
    user = "张三"
    time = "今天"
    template3 = t"{response}，{user}！{time}天气不错。"
    print(f"\n复杂模板: {template3}")
    print(f"  模板分解: {list(template3)}")
    print()


def demo_t_string_use_cases():
    """演示 t-string 的实际使用场景"""
    print("=== t-string 实际使用场景 ===")

    # 场景1：HTML模板
    title = "我的网页"
    content = "这是网页内容"
    html_template = t"<h1>{title}</h1><p>{content}</p>"
    print("HTML模板:")
    print(f"  模板: {html_template}")

    # 场景2：SQL查询模板
    table = "users"
    condition = "age > 18"
    sql_template = t"SELECT * FROM {table} WHERE {condition}"
    print(f"\nSQL查询模板: {sql_template}")

    # 场景3：配置文件模板
    app_name = "MyApp"
    version = "1.0.0"
    config_template = t"[application]\nname = {app_name}\nversion = {version}"
    print(f"\n配置文件模板: {config_template}")

    # 场景4：日志消息模板
    level = "ERROR"
    message = "数据库连接失败"
    log_template = t"[{level}] {message}"
    print(f"\n日志消息模板: {log_template}")
    print()


def demo_t_string_properties():
    """演示 t-string 对象的属性"""
    print("=== t-string 对象属性演示 ===")

    # 创建包含各种元素的模板
    prefix = "Hello"
    name = "World"
    suffix = "!"
    template = t"{prefix}, {name}{suffix}"

    print(f"模板: {template}")
    print(f"strings 属性: {template.strings}")
    print(f"values 属性: {template.values}")
    print(f"interpolations 属性: {template.interpolations}")

    # 演示空字符串的属性
    empty_template = t""
    print(f"\n空模板:")
    print(f"  strings: {empty_template.strings}")
    print(f"  values: {empty_template.values}")

    # 演示只有变量的模板
    var_only_template = t"{variable}"
    print(f"\n纯变量模板:")
    print(f"  strings: {var_only_template.strings}")
    print(f"  values: {var_only_template.values}")
    print()


def demo_t_string_limitations():
    """演示 t-string 的一些限制"""
    print("=== t-string 限制说明 ===")

    print("注意：t-string 需要 Python 3.14+ 才能使用")
    print(f"当前 Python 版本: {sys.version}")

    print("\nt-string 的特点:")
    print("1. 使用 't' 前缀创建")
    print("2. 返回 Template 对象而非普通字符串")
    print("3. 使用 {} 而不是 $ 进行变量插值")
    print("4. 支持转换说明符 (!s, !r, !a)")
    print("5. 不能在模式匹配中使用")
    print("6. 不能与 f-string 混用")
    print()


def main():
    """主函数"""
    print("Python t-string (模板字符串) 完整演示")
    print("=" * 50)

    if sys.version_info < (3, 14):
        print("⚠️  警告: t-string 需要 Python 3.14+ 版本")
        print("当前演示可能无法正常运行，请升级到 Python 3.14+")
        print()

    try:
        demo_t_string_basic()
        demo_t_string_vs_template()
        demo_t_string_features()
        demo_t_string_use_cases()
        demo_t_string_properties()
        demo_t_string_limitations()

        print("✅ t-string 演示完成！")
        print("\n📝 总结:")
        print("- t-string 是 Python 3.14+ 的新特性")
        print("- 使用 't' 前缀创建字符串模板")
        print("- 返回 string.Template 对象")
        print("- 比传统 Template 语法更直观")
        print("- 适合需要字符串模板的场景")

    except SyntaxError as e:
        print(f"❌ 语法错误: {e}")
        print("这通常是因为您的 Python 版本低于 3.14，不支持 t-string 语法")


if __name__ == "__main__":
    main()